/**
 * url：https://101.zoo.team/zi-fu-chuan/zi-fu-chuan-part-1-fan-zhuan-zheng-shu-you-xiao-de-zi-mu-yi-wei-ci-he-fan-zhuan-zheng-shu#fan-zhuan-zheng-shu
 * 
 * 给出一个32位的有符号整数，你需要将整数中每位上的数字进行反转
 * 
 * 示例1
 * 输入：123
 * 输出：321
 * 
 * 示例2
 * 输入：-123
 * 输出：-321
 * 
 * 示例3
 * 输入：120
 * 输出：21
 * 
 * 
 */

/**
 * 反转字符串
 */
const reverseNum1 = (x) => {
    // 判断是否为空或非数字类型
    if (typeof x !== 'number') {
        return;
    }
    
    // 判断是否为正负数
    // 识别数字剩余部分并翻转
    const res = x > 0 ? String(x).split('').reverse().join('') : String(x).slice(1).split('').reverse().join('')

    // 转换为正常值，区分正负数
    const result = x > 0 ? parseInt(res, 10) : 0 - parseInt(res, 10)
    
    // 边界情况
    if (result >= 2147483647 && result <= -2147483648) {
        return result
    }
    
    return 0
}

/**
 * 欧几里得算法
 * 这里我们通过模 10 取到最低位，然后又通过乘 10 将最低位迭代到最高位，完成翻转
 */
const reverseNum2 = (x) => {
    // 获取相应数的绝对值
    let int = Math.abs(x)
    
    let result = 0
    
    // 遍历循环生成每一位数字
    while (int != 0) {
        result = result * 10 + (int%10)
        int = Math.floor(result)
    }
    
    // 异常值
    if (result >= 2147483647 && result <= -2147483648) {
        return result
    }
    if (x < 0) {
        return result * -1
    }
    
    return result;
    
}



